package com.oazon.moco.link.ui;

import java.util.Arrays;

import com.oazon.moco.link.core.LinkEvent;
import com.oazon.moco.link.core.LinkEventListener;
import com.oazon.moco.link.core.source.LinkEventSource;
import com.oazon.moco.link.event.SpechEvent;
import com.oazon.moco.link.event.SpeechStatus;
import com.oazon.voicelib.model.SemanticObj;

public class SpechEventListener extends LinkEventListener {

	public SpechEventListener(LinkEventSource... sources) {
		setBlackList(Arrays.asList(sources));
	}

	@Override
	public void onLinkEvent(LinkEvent event) {
		if (filter((LinkEventSource) event.getSource())
				|| !(event instanceof SpechEvent)) {
			return;
		}
		
		SpechEvent e = (SpechEvent) event;

		if (e.getSpechStatus() == SpeechStatus.SPEECHSTART) {
			speechStart();
		}else if (e.getSpechStatus() == SpeechStatus.SPEECHSTOP) {
			speechStop();
		}else if(e.getSpechStatus() == SpeechStatus.SPEECH_END){
			speechEnd();
		}else if(e.getSpechStatus() == SpeechStatus.SPEECH_RESULT_OBJECT){
			speechResultObject(e.getSemanticObj());
		}else if(e.getSpechStatus() == SpeechStatus.SPEECH_RESULT_STRING){
			speechResultString(e.getStrResult());
		}else if(e.getSpechStatus() == SpeechStatus.SPEECH_SPEECK_COMPLITE){
			speechSpeakComplite(e.isWake());
		}else if(e.getSpechStatus() == SpeechStatus.SPEECH_START_SPEAK){
			speechStartSpeak(e.getSpeakString());
		}else if(e.getSpechStatus() == SpeechStatus.SPEECH_STOP_SPEAK){
			speechStopSpeak();
		}else if(e.getSpechStatus() == SpeechStatus.SPEECH_UNDERSTAND_ERROR){
			speechUndertandError(e.getStrError());
		}else if(e.getSpechStatus() == SpeechStatus.SPEECH_VOLUME){
			speechVolume(e.getVolume());
		}

	}

	/**
	 * UI根据音量的大小进行动画效果
	 * 语音识别时候的音量大小
	 * @param volume
	 * 【0~31】
	 */
	protected void speechVolume(int volume) {
		
	}

	/**
	 * UI跳转回原页面
	 * 语音识别失败
	 * @param strError
	 */
	protected void speechUndertandError(String strError) {
		
	}

	/**
	 * UI跳转回原页面
	 * 停止语音合成
	 */
	protected void speechStopSpeak() {
		
	}

	/**
	 * 
	 * 开始语音合成（手机语音说string的字符）
	 * @param string
	 */
	protected void speechStartSpeak(String string) {
		
	}

	/**
	 * 语音合成结束（手机语音说完了）
	 */
	protected void speechSpeakComplite(boolean isWake) {
		
	}

	/**
	 * （预留以speechResultObject为主）
	 * 语音合成的结果
	 * @param strResult
	 */
	protected void speechResultString(String strResult) {
		
	}

	/**
	 * UI===这里是识别后的结果
	 * 语音合成的结果
	 * @param semanticObj
	 */
	protected void speechResultObject(SemanticObj semanticObj) {
		
	}

	/**
	 * UI这里开始云端识别语音的内容
	 * 用户说完了
	 */
	protected void speechEnd() {
		
	}

	/**
	 * UI返回原界面
	 * 语音关闭的时候调用
	 */
	protected void speechStop() {
		
	}

	/**
	 * UI打开语音界面
	 * 语音开始的时候被调用
	 */
	protected void speechStart() {
		
	}
}
